package cn.itcast.web.controller.system;

import cn.itcast.domain.system.Dept;
import cn.itcast.domain.system.Role;
import cn.itcast.domain.system.User;
import cn.itcast.service.system.DeptService;
import cn.itcast.service.system.RoleService;
import cn.itcast.service.system.UserService;
import cn.itcast.utils.Encrypt;
import cn.itcast.web.controller.BaseController;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 用户模块
 */
@Controller
@RequestMapping("/system/user")
public class UserController extends BaseController {

    @Autowired
    private UserService userService;

    @Autowired
    private DeptService deptService;

    @Autowired
    private RoleService roleService;

    /*
        查询所有用户
     */
    @RequestMapping("/list")
    public String findAll(
            @RequestParam(defaultValue = "1")int page,
            @RequestParam(defaultValue = "10")int size
    ){
        //调用Service层查询数据
        PageInfo info=userService.findAll(page,size);
        //将查询到的数据保存到request域中带到页面展示
        request.setAttribute("page",info);
        return "system/user/user-list";
    }

    /*
        跳转添加用户页面
     */
    @RequestMapping("/toAdd")
    public String toAdd(){
        //根据当前登录的企业id查询所有部门信息
        List<Dept> deptList = deptService.findAll(getLoginCompanyId());
        //将数据带到页面展示
        request.setAttribute("deptList",deptList);
        //跳转到添加用户页面
        return "system/user/user-add";
    }

    /*
        添加用户或修改用户
     */
    @RequestMapping("/edit")
    public String save(User user){
        //调用deptService层根据ID获取部门名称
        Dept dept = deptService.findById(user.getDeptId());
        //封装当前用户的部门名称
        user.setDeptName(dept.getDeptName());
        //封装当前企业ID和企业名称
        user.setCompanyId(getLoginCompanyId());
        user.setCompanyName(getLoginCompanyName());
        //判断当前用户是否用ID
        if (StringUtils.isEmpty(user.getId())){
            //当前用户没有Id执行新增方法
            //将密码加密
            user.setPassword(Encrypt.md5(user.getPassword(), user.getUserName()));
            //调用userService层
            userService.save(user);
        }else {
            //当前用户有ID 执行修改的方法
            //调用UserService层执行修改的方法
            userService.update(user);
        }

        //重定向到页面展示
        return "redirect:/system/user/list.do";
    }

    /*
        根据ID查询用户信息，并带回页面展示
     */
    @RequestMapping("/toUpdate")
    public String findById(String id){
        //调用deptService根据当前登录企业ID查询所有部门信息
        List<Dept> deptList = deptService.findAll(getLoginCompanyId());
        //调用UserService层查询用户数据
        User user=userService.findById(id);
        //将获取到的数据保存到request域中
        request.setAttribute("user",user);
        //将所有的部门信息保存到request域中
        request.setAttribute("deptList",deptList);
        //请求转发
        return "/system/user/user-update";
    }

    /*
        根据指定的ID删除用户信息，这里使用逻辑删除，更改字段默认值使其不显示
     */
    @RequestMapping("/delete")
    public String delete(String id){
        //调用UserService层执行删除方法
        userService.delete(id);
        //重定向查询页面
        return "redirect:/system/user/list.do";
    }

    /*
        角色管理
     */
    @RequestMapping("/roleList")
    public String roleList(String id){
        //根据当前ID查询所属的角色信息
        List<String> ids= roleService.findByRoleId(id);
        //将集合数据拼接成字符串
        String userRoleStr="";
        for (String s : ids) {
            userRoleStr +=s+",";
        }
        //将数据存储到request域中
        request.setAttribute("userRoleStr",userRoleStr);
        //更加用户ID查询用户信息
        User user = userService.findById(id);
        //调用userService层根据写数据到的用户ID查询角色信息
       List<Role> roleList= roleService.findAll(getLoginCompanyId());
       //将数据存储到request域中
        request.setAttribute("roleList",roleList);
        //将数据保存到域对象张
        request.setAttribute("user",user);
        return "system/user/user-role";
    }

    //保存我们所属的角色数据
    @RequestMapping("/changeRole")
    public String changeRole(String userid,String[] roleIds){
        //调用roleService层保存数据
        roleService.changeRole(userid,roleIds);
        //调转到查询所有页面
        return "redirect:/system/user/roleList.do?id="+userid;
    }
}
